// =====================================================
// Axios 实例配置
// =====================================================

import axios from "axios";
import { message } from "antd";

// 创建 axios 实例
const request = axios.create({
  baseURL: "http://localhost:8080/api",
  timeout: 30000,
  headers: {
    "Content-Type": "application/json",
  },
});

// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // 可以在这里添加 token
    // const token = localStorage.getItem('token');
    // if (token) {
    //   config.headers.Authorization = `Bearer ${token}`;
    // }
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    // 如果后端返回的是标准格式 {code, message, data}
    if (
      response.data &&
      typeof response.data === "object" &&
      "code" in response.data
    ) {
      const { code, message: msg, data } = response.data;

      // 后端返回 code 为 0 表示成功
      if (code === 0) {
        return data;
      } else {
        // 业务错误
        message.error(msg || "请求失败");
        return Promise.reject(new Error(msg || "请求失败"));
      }
    }

    // 如果不是标准格式，直接返回数据
    return response.data;
  },
  (error) => {
    // HTTP 错误
    if (error.response) {
      const { status } = error.response;
      switch (status) {
        case 400:
          message.error("请求参数错误");
          break;
        case 401:
          message.error("未授权，请重新登录");
          break;
        case 403:
          message.error("拒绝访问");
          break;
        case 404:
          message.error("请求的资源不存在");
          break;
        case 500:
          message.error("服务器内部错误");
          break;
        default:
          message.error(`请求失败: ${status}`);
      }
    } else if (error.request) {
      message.error("网络错误，请检查您的网络连接");
    } else {
      message.error(error.message || "请求失败");
    }
    return Promise.reject(error);
  }
);

export default request;
